package main

import "fmt"

type MyError struct {
	error
}

func (this *MyError) Error() string {
	return "自定义错误MyError"
}

func Devide(num1, num2 int) int {
	if num2 == 0 {
		panic(&MyError{})
	} else {
		return num1 / num2
	}
}

func main() {

	var a, b int
	fmt.Scanf("%d %d", &a, &b)

	defer func() {
		if r := recover(); r != nil {
			fmt.Printf("panic的内容%v\n", r)
			if _, ok := r.(error); ok {
				fmt.Println("panic--recover()得到的是error类型")
			}
			if _, ok := r.(*MyError); ok {
				fmt.Println("panic--recover()得到的是MyError类型")
			}
			if _, ok := r.(string); ok {
				fmt.Println("panic--recover()得到的是string类型")
			}
		}
	}()

	result := Devide(a, b)
	fmt.Println("result：", result)

	defer func() {
		if ok := recover(); ok != nil {
			fmt.Println("recover")
		}
	}()
	panic("error")

}
